﻿namespace DataBaseHelper
{
    /// <summary>
    /// 数据库访问接口，定义一组操作数据库的通用方法
    /// </summary>
    public interface IDBS
    {
        /// <summary>
        /// 打开一个数据库连接
        /// </summary>
        void Open();

        /// <summary>
        /// 关闭一个数据库连接
        /// </summary>
        void Close();

        /// <summary>
        /// 预编译一个不带参数的SQL语句
        /// </summary>
        /// <param name="sql">要预编译的SQL语句</param>
        /// <returns>是否成功</returns>
        bool Prepare(string sql);

        /// <summary>
        /// 创建对应数据库的参数实例
        /// </summary>
        /// <returns></returns>
        System.Data.Common.DbParameter CreateParameter();

        /// <summary>
        /// 预编译一个带有参数的SQL语句
        /// </summary>
        /// <param name="sql">要预编译的SQL语句</param>
        /// <param name="Parameters">进行绑定的参数列表定义</param>
        /// <returns>是否成功</returns>
        bool Prepare(string sql, System.Data.Common.DbParameter[] Parameters);

        /// <summary>
        /// 通过索引设置预编译SQL语句的参数
        /// </summary>
        /// <param name="index">参数的序号，从0开始</param>
        /// <param name="value">参数的值</param>
        /// <returns>设置是否成功</returns>
        bool SetParam(int index,object value);

        /// <summary>
        /// 通过参数名称设置SQL预编译语句的参数
        /// </summary>
        /// <param name="name">参数的名称</param>
        /// <param name="value">参数的值</param>
        /// <returns>设置是否成功</returns>
        bool SetParam(string name,object value);

        /// <summary>
        /// 批量绑定SQL预编译语句的参数
        /// </summary>
        /// <param name="paras">已经按参数顺序排序的参数值</param>
        /// <returns>绑定是否成功</returns>
        bool BindParams(params object[] paras);

        /// <summary>
        /// 执行一个查询操作
        /// </summary>
        /// <param name="result">用于输出的结果集</param>
        /// <returns>查询是否成功</returns>
        bool ExecuteQuery(out System.Data.DataSet result);

        /// <summary>
        /// 执行一个非查询操作
        /// </summary>
        /// <returns>操作或批处理影响的行数</returns>
        int ExecuteNonQuery();

        /// <summary>
        /// 获取最近一次导致数据库操作失败的错误或异常
        /// </summary>
        System.Exception LastError { get; }
    }
}
